//https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=23290&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13
// 思路：基于stack实现：1.依次从pushV中，取数字加入到栈中；2.如果栈顶的数字等于popV的当前数字，那么继续循环判断栈顶 3.否则，stack中继续添加元素，直到相等popV的当前数字 = 栈顶元素；
//重点题目
#include <iostream>
#include <vector>
#include <climits>
#include <stack>
#include <queue>

using namespace std;

class Solution {
public:
 bool IsPopOrder(vector<int> pushV,vector<int> popV) {
     int n = pushV.size();
     stack<int> stk;    // 使用STL中的栈容器
     int i = 0, j = 0;
     while(i < n){
         stk.push(pushV[i]);    // 首先将pushV[i]入栈
         while(!stk.empty() && stk.top() == popV[j]){    // 不断检查栈顶
             ++j;
             stk.pop();
             }
         ++i;
         }
 
     return j == n;    // 判断能否成功对应
 }
};